/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import com.mysql.jdbc.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import modelo.Cliente;

/**
 *
 * @author eli
 */
public class ClienteDAO
{
    private Connection con;
    
    public ClienteDAO(Connection conexao)
    {
        this.con = conexao;
    }
    
    public void adicionar(Cliente cliente)
    {
        /*
        String comando0 = "insert into endereco(cidade, rua) values('"+ 
                            cliente.getEndereco().getCidade() +"', '"+ 
                            cliente.getEndereco().getRua() +"')";
        */
        
        String comando0 = "insert into endereco(cidade, rua) values(?, ?)";        
            
        try
        {
            PreparedStatement stmt = this.con.prepareStatement(comando0);
            stmt.setString(1, cliente.getEndereco().getCidade());
            stmt.setString(2, cliente.getEndereco().getRua());
            
            //stmt.executeUpdate();
            stmt.execute();
        }
        catch( java.sql.SQLException e )
        {
            throw new java.lang.RuntimeException(e.getMessage());
        }
        
        /*
        String comando = "insert into cliente(nome, telefone, rg, cpf, endereco_codigo) values('"+ 
                            cliente.getNome() +"', '"+ cliente.getTelefone() +"', '"+ 
                            cliente.getRg() +"', '"+ cliente.getCpf() +"', LAST_INSERT_ID())";
        */
        
        String comando = "insert into cliente(nome, telefone, rg, cpf, endereco_codigo) values(?, ?, ?, ?, LAST_INSERT_ID())";

        try
        {
            //java.sql.Statement stmt = con.createStatement();
            //stmt.executeUpdate(comando);
            
            PreparedStatement stmt = this.con.prepareStatement(comando);
            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getTelefone());
            stmt.setString(3, cliente.getRg());
            stmt.setString(4, cliente.getCpf());
           
            
            //stmt.executeUpdate();
            stmt.execute();
            
        }
        catch( java.sql.SQLException e )
        {
            throw new java.lang.RuntimeException(e.getMessage());
        }
    }
    
    public void remover(String codigo)
    {
        String comando = "delete from cliente where codigo = '"+ codigo +"'";

        try
        {
            Statement stmt = this.con.createStatement();
            stmt.executeUpdate(comando);
            //stmt.close();
        }
        catch( java.sql.SQLException e )
        {
            throw new java.lang.RuntimeException(e.getMessage());
        }
    }
    
    public void editar()
    {
        
    }
    
    public Vector<Vector> listarTodos()
    {
        String comando = "select * from cliente";
        
        // Cria o vetor
        Vector<Vector> dados = new Vector<Vector>();
        
        try
        {
            Statement stmt = this.con.createStatement();
            ResultSet rs = stmt.executeQuery(comando);
            
            while( rs.next() )
            {
                // Le registros do banco de dados
                int codigo = rs.getInt("codigo");
                String nome = rs.getString("nome");
                String telefone = rs.getString("telefone");
                String rg = rs.getString("rg");
                String cpf = rs.getString("cpf");

                // Armazena as informações no vetor do registro
                Vector registroAtual = new Vector();
                registroAtual.add(codigo);
                registroAtual.add(nome);
                registroAtual.add(telefone);
                registroAtual.add(rg);
                registroAtual.add(cpf);

                // Adiciona o vetor de registro ao vetor principal
                dados.add(registroAtual);
            }
        }
        catch( java.sql.SQLException e )
        {
            e.printStackTrace();
            throw new java.lang.RuntimeException(e.getMessage());
        }
        
        return dados;
    }
    
    public Vector<Vector> procurar(String parametro)
    {
        String comando = "select * from cliente where nome like '%"+ parametro +"%'";
        
        // Cria o vetor
        Vector<Vector> dados = new Vector<Vector>();
        
        try
        {
            Statement stmt = this.con.createStatement();
            ResultSet rs = stmt.executeQuery(comando);
            
            while( rs.next() )
            {
                // Le registros do banco de dados
                int codigo = rs.getInt("codigo");
                String nome = rs.getString("nome");
                String telefone = rs.getString("telefone");
                String rg = rs.getString("rg");
                String cpf = rs.getString("cpf");

                // Armazena as informações no vetor do registro
                Vector registroAtual = new Vector();
                registroAtual.add(codigo);
                registroAtual.add(nome);
                registroAtual.add(telefone);
                registroAtual.add(rg);
                registroAtual.add(cpf);

                // Adiciona o vetor de registro ao vetor principal
                dados.add(registroAtual);
            }
        }
        catch( java.sql.SQLException e )
        {
            e.printStackTrace();
            throw new java.lang.RuntimeException(e.getMessage());
        }
                
        return dados;
    }
}
